System.register([], function (_export) {
'use strict';
var ComputedPropertyObserver;
_export('hasDeclaredDependencies', hasDeclaredDependencies);
_export('declarePropertyDependencies', declarePropertyDependencies);
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function hasDeclaredDependencies(descriptor) {
return descriptor && descriptor.get && !descriptor.set && descriptor.get.dependencies && descriptor.get.dependencies.length;
}
function declarePropertyDependencies(ctor, propertyName, dependencies) {
var descriptor = Object.getOwnPropertyDescriptor(ctor.prototype, propertyName);
if (descriptor.set) throw new Error('The property cannot have a setter function.');
descriptor.get.dependencies = dependencies;
}
return {
setters: [],
execute: function () {
ComputedPropertyObserver = (function () {
function ComputedPropertyObserver(obj, propertyName, descriptor, observerLocator) {
_classCallCheck(this, ComputedPropertyObserver);
this.obj = obj;
this.propertyName = propertyName;
this.descriptor = descriptor;
this.observerLocator = observerLocator;
this.callbacks = [];
}
ComputedPropertyObserver.prototype.getValue = function getValue() {
return this.obj[this.propertyName];
};
ComputedPropertyObserver.prototype.setValue = function setValue(newValue) {
throw new Error('Computed properties cannot be assigned.');
};
ComputedPropertyObserver.prototype.trigger = function trigger(newValue, oldValue) {
var callbacks = this.callbacks,
i = callbacks.length;
while (i--) {
callbacks[i](newValue, oldValue);
}
};
ComputedPropertyObserver.prototype.evaluate = function evaluate() {
var newValue = this.getValue();
Iif (this.oldValue === newValue) return;
this.trigger(newValue, this.oldValue);
this.oldValue = newValue;
};
ComputedPropertyObserver.prototype.subscribe = function subscribe(callback) {
var _this = this;
var dependencies, i, ii;
this.callbacks.push(callback);
Eif (this.oldValue === undefined) {
this.oldValue = this.getValue();
this.subscriptions = [];
dependencies = this.descriptor.get.dependencies;
for (i = 0, ii = dependencies.length; i < ii; i++) {
// todo: consider throwing when a dependency's observer is an instance of DirtyCheckProperty.
this.subscriptions.push(this.observerLocator.getObserver(this.obj, dependencies[i]).subscribe(function () {
return _this.evaluate();
}));
}
}
return function () {
_this.callbacks.splice(_this.callbacks.indexOf(callback), 1);
Iif (_this.callbacks.length > 0) return;
while (_this.subscriptions.length) {
_this.subscriptions.pop()();
}
_this.oldValue = undefined;
};
};
return ComputedPropertyObserver;
})();
_export('ComputedPropertyObserver', ComputedPropertyObserver);
}
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2JpbmRpbmcvc3JjL2NvbXB1dGVkLW9ic2VydmF0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztNQUFhLHdCQUF3Qjs7cUNBOERyQix1QkFBdUI7O3lDQUt2QiwyQkFBMkI7Ozs7QUFMcEMsV0FBUyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUU7QUFDbEQsV0FBTyxVQUFVLElBQUksVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQ2pELFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztHQUN4RTs7QUFFTSxXQUFTLDJCQUEyQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFO0FBQzVFLFFBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQy9FLFFBQUksVUFBVSxDQUFDLEdBQUcsRUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0FBQ2pFLGNBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztHQUM1Qzs7Ozs7QUF4RVksOEJBQXdCO0FBQ3hCLGlCQURBLHdCQUF3QixDQUN2QixHQUFHLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUM7Z0NBRGhELHdCQUF3Qjs7QUFFakMsY0FBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZixjQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNqQyxjQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUM3QixjQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUN2QyxjQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztTQUNyQjs7QUFQVSxnQ0FBd0IsV0FTbkMsUUFBUSxHQUFBLG9CQUFFO0FBQ1IsaUJBQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDcEM7O0FBWFUsZ0NBQXdCLFdBYW5DLFFBQVEsR0FBQSxrQkFBQyxRQUFRLEVBQUM7QUFDaEIsZ0JBQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztTQUM1RDs7QUFmVSxnQ0FBd0IsV0FpQm5DLE9BQU8sR0FBQSxpQkFBQyxRQUFRLEVBQUUsUUFBUSxFQUFDO0FBQ3pCLGNBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO2NBQzFCLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDOztBQUV6QixpQkFBTSxDQUFDLEVBQUUsRUFBRTtBQUNULHFCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1dBQ2xDO1NBQ0Y7O0FBeEJVLGdDQUF3QixXQTBCbkMsUUFBUSxHQUFBLG9CQUFHO0FBQ1QsY0FBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQy9CLGNBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQzVCLE9BQU87QUFDVCxjQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEMsY0FBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FDMUI7O0FBaENVLGdDQUF3QixXQWtDbkMsU0FBUyxHQUFBLG1CQUFDLFFBQVEsRUFBQzs7O0FBQ2pCLGNBQUksWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7O0FBRXhCLGNBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUU5QixjQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQy9CLGdCQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQyxnQkFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7O0FBRXhCLHdCQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBQ2hELGlCQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTs7QUFFakQsa0JBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO3VCQUFNLE1BQUssUUFBUSxFQUFFO2VBQUEsQ0FBQyxDQUFDLENBQUM7YUFDdkg7V0FDRjs7QUFFRCxpQkFBTyxZQUFNO0FBQ1gsa0JBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsZ0JBQUksTUFBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDM0IsT0FBTztBQUNULG1CQUFNLE1BQUssYUFBYSxDQUFDLE1BQU0sRUFBRTtBQUMvQixvQkFBSyxhQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQzthQUM1QjtBQUNELGtCQUFLLFFBQVEsR0FBRyxTQUFTLENBQUM7V0FDM0IsQ0FBQztTQUNIOztlQTNEVSx3QkFBd0I7OzswQ0FBeEIsd0JBQXdCIiwiZmlsZSI6Ii9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2JpbmRpbmcvc3JjL2NvbXB1dGVkLW9ic2VydmF0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIENvbXB1dGVkUHJvcGVydHlPYnNlcnZlciB7XG4gIGNvbnN0cnVjdG9yKG9iaiwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBvYnNlcnZlckxvY2F0b3Ipe1xuICAgIHRoaXMub2JqID0gb2JqO1xuICAgIHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7XG4gICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XG4gICAgdGhpcy5jYWxsYmFja3MgPSBbXTtcbiAgfVxuXG4gIGdldFZhbHVlKCl7XG4gICAgcmV0dXJuIHRoaXMub2JqW3RoaXMucHJvcGVydHlOYW1lXTtcbiAgfVxuXG4gIHNldFZhbHVlKG5ld1ZhbHVlKXtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXB1dGVkIHByb3BlcnRpZXMgY2Fubm90IGJlIGFzc2lnbmVkLicpO1xuICB9XG5cbiAgdHJpZ2dlcihuZXdWYWx1ZSwgb2xkVmFsdWUpe1xuICAgIHZhciBjYWxsYmFja3MgPSB0aGlzLmNhbGxiYWNrcyxcbiAgICAgICAgaSA9IGNhbGxiYWNrcy5sZW5ndGg7XG5cbiAgICB3aGlsZShpLS0pIHtcbiAgICAgIGNhbGxiYWNrc1tpXShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKCkge1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICBpZiAodGhpcy5vbGRWYWx1ZSA9PT0gbmV3VmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy50cmlnZ2VyKG5ld1ZhbHVlLCB0aGlzLm9sZFZhbHVlKTtcbiAgICB0aGlzLm9sZFZhbHVlID0gbmV3VmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUoY2FsbGJhY2spe1xuICAgIHZhciBkZXBlbmRlbmNpZXMsIGksIGlpO1xuXG4gICAgdGhpcy5jYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG5cbiAgICBpZiAodGhpcy5vbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG5cbiAgICAgIGRlcGVuZGVuY2llcyA9IHRoaXMuZGVzY3JpcHRvci5nZXQuZGVwZW5kZW5jaWVzO1xuICAgICAgZm9yIChpID0gMCwgaWkgPSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAvLyB0b2RvOiAgY29uc2lkZXIgdGhyb3dpbmcgd2hlbiBhIGRlcGVuZGVuY3kncyBvYnNlcnZlciBpcyBhbiBpbnN0YW5jZSBvZiBEaXJ0eUNoZWNrUHJvcGVydHkuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMub2JzZXJ2ZXJMb2NhdG9yLmdldE9ic2VydmVyKHRoaXMub2JqLCBkZXBlbmRlbmNpZXNbaV0pLnN1YnNjcmliZSgoKSA9PiB0aGlzLmV2YWx1YXRlKCkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxsYmFja3Muc3BsaWNlKHRoaXMuY2FsbGJhY2tzLmluZGV4T2YoY2FsbGJhY2spLCAxKTtcbiAgICAgIGlmICh0aGlzLmNhbGxiYWNrcy5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm47XG4gICAgICB3aGlsZSh0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wb3AoKSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5vbGRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNEZWNsYXJlZERlcGVuZGVuY2llcyhkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZ2V0ICYmICFkZXNjcmlwdG9yLnNldFxuICAgICYmIGRlc2NyaXB0b3IuZ2V0LmRlcGVuZGVuY2llcyAmJiBkZXNjcmlwdG9yLmdldC5kZXBlbmRlbmNpZXMubGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZVByb3BlcnR5RGVwZW5kZW5jaWVzKGN0b3IsIHByb3BlcnR5TmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdG9yLnByb3RvdHlwZSwgcHJvcGVydHlOYW1lKTtcbiAgaWYgKGRlc2NyaXB0b3Iuc2V0KVxuICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3BlcnR5IGNhbm5vdCBoYXZlIGEgc2V0dGVyIGZ1bmN0aW9uLicpO1xuICBkZXNjcmlwdG9yLmdldC5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7XG59XG4iXX0= |